{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.datasets import make_blobs\n",
    "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nfL7+ej3KWg7jscceIzMzk+joaHr37s0bb7zhyaZFixYxZMgQ7rrrLhITE5k3b16z2ep0OsnKymLZ\nsmUkJSUxf/58oOlQ0OOPP056ejrR0dH07NmTjz76CNAzQ3/729965Bk4cCC7d+8GtMXjqaeeonv3\n7nTvfnhiQ05ODgA33HADt912G6NGjSIqKoohQ4aQl5fHnXfeSXx8PL169eLrr7/2yNClSxc+/PBD\nQFvnxo0bx+TJk4mOjiYrK4svv/zSE7elPLrggguYNWsW8fHxdO3a1WMRmTNnDmvXrmXGjBlERUUx\nY8YMv3m3ePFipk+fTt++fcnOzm4Q1qVLF5544gn69u1LbGws48ePp6pKK+dFRUWMGTOGpKQk4uPj\nGTNmDHv27Gly/pqaGhISEti4caPnWEFBAREREezfv5/CwkLGjBlDXFwcCQkJDB06FLfb3SSvPv/8\ncwYNGkRMTAzJycncfffdPu9n2LBhvP766wB8+umniAjvvPMOAB999BH9+/dvkH8AP/nJTwDo168f\nUVFRLFu2zHO++fPn07FjR1JTU3nhhRf85uOiRYs4/fTTiY6OpmvXrrz00ksNwn09J9AWyDlz5jBk\nyBAiIiLYsWNHg6HB5p5zY/bt20ffvn35/e9/D8ALL7zAGWecQXR0NKeffjrPPPNMg/i/+93vSE1N\nJS0tjeeff75Bua6urmbWrFmcdtppJCcnM336dCorK/3ev8Hgi5Pr1dRwYiECsVPAsRFsTnCXQc1W\nJOKd43J5peYiIoSHOwkPd9KhQwQAdXVuKipclJe7sNkEh8NGXZ2ipKSakhI9vLlrVzG1tXVs2rQf\nAJerjuzspTzxxGJCQkKZOvWnPPronxk7djJbtnzL7bffzIIFizjjjH6sWvU6l19+BStX/pu4uCji\n41N566336do1g3/8YwUTJ04kJyfHY5Fat24dEyZMID8/v9XTyu12O1dddRXvvfdek7AtW7awcOFC\nvvjiC9LS0ti5cyd1ddp3bcGCBSxdupR3332XHj16sGHDBiIiIjxpV65cybp16wgPD/d53eXLl/Pe\ne++RlZXF6NGjGTx4MA8++CDz589n7ty53H333fzrX//ymfbNN99kxYoVvPDCC9x///3MmDGDzz77\nDIDMzEzWrl1LSkoKr776qs88mjJlCoWFhTz77LPcfPPN5Obm8sgjj/Dpp5+2OIy4a9cu1qxZw8KF\n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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x463f208>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\"\"\"\n",
    "====================================================================\n",
    "Normal and Shrinkage Linear Discriminant Analysis for classification\n",
    "====================================================================\n",
    "\n",
    "Shows how shrinkage improves classification.\n",
    "\"\"\"\n",
    "\n",
    "from __future__ import division\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.datasets import make_blobs\n",
    "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
    "\n",
    "\n",
    "n_train = 20  # samples for training\n",
    "n_test = 200  # samples for testing\n",
    "n_averages = 50  # how often to repeat classification\n",
    "n_features_max = 75  # maximum number of features\n",
    "step = 4  # step size for the calculation\n",
    "\n",
    "\n",
    "def generate_data(n_samples, n_features):\n",
    "    \"\"\"Generate random blob-ish data with noisy features.\n",
    "\n",
    "    This returns an array of input data with shape `(n_samples, n_features)`\n",
    "    and an array of `n_samples` target labels.\n",
    "\n",
    "    Only one feature contains discriminative information, the other features\n",
    "    contain only noise.\n",
    "    \"\"\"\n",
    "    X, y = make_blobs(n_samples=n_samples, n_features=1, centers=[[-2], [2]])\n",
    "\n",
    "    # add non-discriminative features\n",
    "    if n_features > 1:\n",
    "        X = np.hstack([X, np.random.randn(n_samples, n_features - 1)])\n",
    "    return X, y\n",
    "\n",
    "acc_clf1, acc_clf2 = [], []\n",
    "n_features_range = range(1, n_features_max + 1, step)\n",
    "for n_features in n_features_range:\n",
    "    score_clf1, score_clf2 = 0, 0\n",
    "    for _ in range(n_averages):\n",
    "        X, y = generate_data(n_train, n_features)\n",
    "\n",
    "        clf1 = LinearDiscriminantAnalysis(solver='lsqr', shrinkage='auto').fit(X, y)\n",
    "        clf2 = LinearDiscriminantAnalysis(solver='lsqr', shrinkage=None).fit(X, y)\n",
    "\n",
    "        X, y = generate_data(n_test, n_features)\n",
    "        score_clf1 += clf1.score(X, y)\n",
    "        score_clf2 += clf2.score(X, y)\n",
    "\n",
    "    acc_clf1.append(score_clf1 / n_averages)\n",
    "    acc_clf2.append(score_clf2 / n_averages)\n",
    "\n",
    "features_samples_ratio = np.array(n_features_range) / n_train\n",
    "\n",
    "plt.plot(features_samples_ratio, acc_clf1, linewidth=2,\n",
    "         label=\"Linear Discriminant Analysis with shrinkage\", color='navy')\n",
    "plt.plot(features_samples_ratio, acc_clf2, linewidth=2,\n",
    "         label=\"Linear Discriminant Analysis\", color='gold')\n",
    "\n",
    "plt.xlabel('n_features / n_samples')\n",
    "plt.ylabel('Classification accuracy')\n",
    "\n",
    "plt.legend(loc=1, prop={'size': 12})\n",
    "plt.suptitle('Linear Discriminant Analysis vs. \\\n",
    "shrinkage Linear Discriminant Analysis (1 discriminative feature)')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
